home *** CD-ROM | disk | FTP | other *** search
/ User's Choice Windows CD / User's Choice Windows CD (CMS Software)(1993).iso / utility2 / trmnat.zip / TERMINAT.OLD < prev    next >
Text File  |  1992-02-04  |  11KB  |  403 lines

  1. /* 
  2.  * TERMINAT.C -- Terminate Apps and Tasks
  3.  *         Copyright (c) 1991, Gordon Harris, Data Arts
  4.  */
  5.  
  6.  
  7. #define WIN31
  8. #define STRICT
  9. #include <windows.h>
  10. #ifdef STRICT
  11. #include <windowsx.h>
  12. #endif
  13. #ifdef DEBUG
  14. #include <debug.h>
  15. #endif
  16. #include <toolhelp.h>
  17. #include "terminat.h"
  18.  
  19.  
  20. BOOL FAR PASCAL DlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
  21.  
  22. char szAppName[] = "Terminat";
  23. HINSTANCE hInst;
  24.  
  25.  
  26. int PASCAL WinMain (HINSTANCE hInstance, HINSTANCE hPrevInst, LPSTR lpszCmdLine, int nCmdShow)
  27.    {
  28.    FARPROC lpfnDlg;
  29.  
  30.    hInst = hInstance;
  31.  
  32.    if (hPrevInst)
  33.       return 0;
  34.  
  35.    lpfnDlg = (FARPROC) MakeProcInstance((FARPROC)DlgProc, hInstance);
  36.    DialogBox(hInstance, "TERMINAT", NULL, (DLGPROC)lpfnDlg);
  37.    FreeProcInstance((FARPROC)lpfnDlg);
  38.  
  39.    return 0;
  40.    }
  41.  
  42.  
  43. BOOL FAR PASCAL EnumProc (HWND hwnd, LPARAM lParam);
  44.  
  45. MODULEENTRY me;
  46. TASKENTRY   te;
  47.  
  48.  
  49.    int n, j;
  50.    HMENU hMenu;
  51.    char szNum[10];
  52.    char szMsg[120];
  53.    static HWND hwnd;
  54.    static HWND hBut;
  55.    static FARPROC lpfn;
  56.    LONG   l;
  57.  
  58.  
  59.    switch(message)
  60.       {
  61.       case WM_INITDIALOG:
  62.  
  63.      hMenu = GetSystemMenu(hDlg,FALSE);
  64.      DeleteMenu (hMenu, SC_MAXIMIZE, MF_BYCOMMAND);
  65.      DeleteMenu (hMenu, SC_SIZE,     MF_BYCOMMAND);
  66.      AppendMenu(hMenu, MF_SEPARATOR, 0, (LPSTR)NULL);
  67.      AppendMenu(hMenu, MF_STRING, ID_REREAD, (LPSTR)"&Reread task list");
  68.  
  69.      /* Give our minimized dialog box an icon.. */
  70.      SetClassWord(hDlg, GCW_HICON, (WPARAM) LoadIcon(hInst, szAppName));
  71.      te.dwSize = sizeof(TASKENTRY);
  72.      me.dwSize = sizeof(MODULEENTRY);
  73.      lpfn = (FARPROC) MakeProcInstance((FARPROC) EnumProc, hInst);
  74.      hwnd = GetDlgItem(hDlg, ID_LIST);
  75.      hBut = GetDlgItem(hDlg, ID_CLOSE);
  76.      PostMessage(hDlg, WM_COMMAND, ID_GETLIST, 0L);
  77.  
  78.      return TRUE;
  79.  
  80.       case WM_ICONERASEBKGND:     WM_PAINTICON No longer defined in windows.h??
  81.      /* Give our minimized dialog box an icon.. */
  82.      SetClassWord(hDlg, GCW_HICON, (WPARAM) LoadIcon(hInst, szAppName));
  83.      return FALSE;
  84.  
  85.       case WM_SYSCOMMAND:
  86.      switch (wParam)
  87.         {
  88.         case ID_REREAD:
  89.            MessageBeep(MB_ICONQUESTION);
  90.            PostMessage(hDlg, WM_COMMAND, ID_GETLIST, 0L);
  91.            return TRUE;
  92.         case SC_CLOSE:
  93.            EndDialog(hDlg, TRUE);
  94.            return TRUE;
  95.         }
  96.           break;
  97.  
  98.       case WM_ACTIVATEAPP:
  99.      if (wParam)
  100.         PostMessage(hDlg, WM_COMMAND, ID_GETLIST, 0L);
  101.      break;
  102.  
  103.       case WM_COMMAND:
  104.      switch(wParam)
  105.         {
  106.         case ID_LIST:
  107.            n = SendDlgItemMessage(hDlg, ID_LIST, LB_GETCURSEL, 0, 0L);
  108.            if (n == LB_ERR)
  109.           return TRUE;
  110.            l = SendDlgItemMessage(hDlg, ID_LIST, LB_GETITEMDATA, n, 0L);
  111.            if (HIWORD(lParam) == LBN_SELCHANGE)
  112.           EnableWindow(GetDlgItem(hDlg, ID_CLOSE), HIWORD(l));
  113.            else if (HIWORD(lParam) == LBN_DBLCLK)
  114.           {
  115.           if (HIWORD(l))
  116.              {
  117.              TaskFindHandle(&te, (HANDLE)LOWORD(l));
  118.              wsprintf(szMsg, "Task   %04X %s hInst %04X hModule %04X SS %04X SP %04X sTop %04X sMin %04X sBot %04X",
  119.                te.hTask, (LPSTR)te.szModule, te.hInst, te.hModule, te.wSS, te.wSP, te.wStackTop, te.wStackMinimum, te.wStackBottom);
  120.              }
  121.           else
  122.              {
  123.              ModuleFindHandle(&me, (HANDLE)LOWORD(l));
  124.              wsprintf(szMsg, "Module %04X %s refcount %d", me.hModule, (LPSTR)me.szExePath, me.wcUsage);
  125.              }
  126.           MessageBox(hDlg, szMsg, szAppName, MB_ICONINFORMATION | MB_OK);
  127.           }
  128.            return TRUE;
  129.  
  130.         /* Populate our listbox.. */
  131.         case ID_GETLIST:
  132.            EnableWindow(GetDlgItem(hDlg, ID_CLOSE), FALSE);
  133.            SendDlgItemMessage(hDlg, ID_LIST, WM_SETREDRAW, 0, 0L);
  134.            j = SendDlgItemMessage(hDlg, ID_LIST, LB_GETCURSEL, 0, 0L);
  135.            SendDlgItemMessage(hDlg, ID_LIST, LB_RESETCONTENT, 0, 0L);
  136.  
  137.            /* Enumerate the loaded modules.. */
  138.            me.dwSize = sizeof(MODULEENTRY);
  139.            ModuleFirst(&me);
  140.            do {
  141.           n = SendDlgItemMessage(hDlg, ID_LIST, LB_ADDSTRING, 0, (LONG)(LPSTR)me.szModule);
  142.           SendDlgItemMessage(hDlg, ID_LIST, LB_SETITEMDATA, n,
  143.             (LONG)MAKELONG(me.hModule,0)); // HIWORD == 0 == module
  144.           } while (ModuleNext(&me));
  145.            if (n != LB_ERR)
  146.           SendDlgItemMessage(hDlg, ID_LIST, LB_SETCURSEL, n, 0L);
  147.            else
  148.           SendDlgItemMessage(hDlg, ID_LIST, LB_SETCURSEL, 0, 0L);
  149.  
  150.  
  151.            /* Now enumerate the tasks.. */
  152.            te.dwSize = sizeof(TASKENTRY);
  153.            TaskFirst(&te);
  154.            do {
  155.           /* Find the module which matches the task.. */
  156.           n = SendDlgItemMessage(hDlg, ID_LIST, LB_FINDSTRING, 0, (LONG)(LPSTR)te.szModule);
  157.           /* Replace the module handle with the task handle.. */
  158.           if (n != LB_ERR)
  159.              SendDlgItemMessage(hDlg, ID_LIST, LB_SETITEMDATA, n,
  160.                   (LONG)MAKELONG(te.hTask,1)); // HIWORD == 1 == task
  161.           } while (TaskNext(&te));
  162.  
  163.            if (j != LB_ERR)
  164.           SendDlgItemMessage(hDlg, ID_LIST, LB_SETCURSEL, j, 0L);
  165.            else
  166.           SendDlgItemMessage(hDlg, ID_LIST, LB_SETCURSEL, 0, 0L);
  167.  
  168.            SendDlgItemMessage(hDlg, ID_LIST, WM_SETREDRAW, 1, 0L);
  169.            InvalidateRect(GetDlgItem(hDlg, ID_LIST), NULL, TRUE);
  170.            return TRUE;
  171.  
  172.         case ID_TERMINATE:
  173.            n = SendDlgItemMessage(hDlg, ID_LIST, LB_GETCURSEL, 0, 0L);
  174.            if (n == LB_ERR)
  175.           return TRUE;
  176.            l = SendDlgItemMessage(hDlg, ID_LIST, LB_GETITEMDATA, n, 0L);
  177.            /* If this is a task, terminate it.. */
  178.            if ( HIWORD(l) && IsTask( (HTASK) LOWORD(l)) )
  179.           TerminateApp((HANDLE)LOWORD(l), NO_UAE_BOX);
  180.            /* Else, reduce the reference count to 0.. */
  181.            else
  182.           {
  183.           j = 0;
  184.           while (n = FreeModule((HINSTANCE)LOWORD(l)))
  185.              {
  186.              if (j == n)
  187.             break;
  188.              j = n;
  189.              }
  190.           }
  191.  
  192.            PostMessage(hDlg, WM_COMMAND, ID_GETLIST, 0L);
  193.            return TRUE;
  194.  
  195.         case ID_CLOSE:
  196.            n = SendDlgItemMessage(hDlg, ID_LIST, LB_GETCURSEL, 0, 0L);
  197.            if (n == LB_ERR)
  198.           return TRUE;
  199.            l = SendDlgItemMessage(hDlg, ID_LIST, LB_GETITEMDATA, n, 0L);
  200.            if (HIWORD(l) && IsTask((HTASK) LOWORD(l)) )
  201.           EnumTaskWindows((HTASK)LOWORD(l), (WNDENUMPROC)lpfn, 0L); //Kill the app..
  202.            PostMessage(hDlg, WM_COMMAND, ID_GETLIST, 0L);
  203.            return TRUE;
  204.  
  205.         case ID_QUIT:
  206.            EndDialog(hDlg, TRUE);
  207.            return TRUE;
  208.         }
  209.       break;
  210.  
  211.       case WM_DESTROY:
  212.      FreeProcInstance((FARPROC)lpfn);
  213.  
  214.       }
  215.    return FALSE;
  216.    }
  217.  
  218.  
  219. /*
  220. BOOL FAR PASCAL xDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
  221.    {
  222.    int n, j;
  223.    HMENU hMenu;
  224.    char szMsg[120];
  225.    static HWND hLst;
  226.    static HWND hBut;
  227.    static FARPROC lpfn;
  228.    LONG   l;
  229.  
  230.  
  231.    switch(message)
  232.       {
  233.       case WM_INITDIALOG:
  234.  
  235.      hMenu = GetSystemMenu(hDlg,FALSE);
  236.      DeleteMenu (hMenu, SC_MAXIMIZE, MF_BYCOMMAND);
  237.      DeleteMenu (hMenu, SC_SIZE,     MF_BYCOMMAND);
  238.      AppendMenu(hMenu, MF_SEPARATOR, 0, (LPSTR)NULL);
  239.      AppendMenu(hMenu, MF_STRING, ID_REREAD, (LPSTR)"&Reread task list");
  240.  
  241.      // Give our minimized dialog box an icon..
  242.      SetClassWord(hDlg, GCW_HICON, (WPARAM) LoadIcon(hInst, szAppName));
  243.      te.dwSize = sizeof(TASKENTRY);
  244.      me.dwSize = sizeof(MODULEENTRY);
  245.      lpfn = (FARPROC) MakeProcInstance((FARPROC) EnumProc, hInst);
  246.      hLst = GetDlgItem(hDlg, ID_LIST);
  247.      hBut = GetDlgItem(hDlg, ID_CLOSE);
  248.      PostMessage(hDlg, WM_COMMAND, ID_GETLIST, 0L);
  249.  
  250.      return TRUE;
  251.  
  252.       //case WM_PAINTICON:    //No longer defined in windows.h??
  253.       case WM_ICONERASEBKGND:
  254.      // Give our minimized dialog box an icon..
  255.      SetClassWord(hDlg, GCW_HICON, (WPARAM) LoadIcon(hInst, szAppName));
  256.      return FALSE;
  257.  
  258.       case WM_SYSCOMMAND:
  259.      switch (wParam)
  260.         {
  261.         case ID_REREAD:
  262.            MessageBeep(MB_ICONQUESTION);
  263.            PostMessage(hDlg, WM_COMMAND, ID_GETLIST, 0L);
  264.            return TRUE;
  265.         case SC_CLOSE:
  266.            EndDialog(hDlg, TRUE);
  267.            return TRUE;
  268.         }
  269.           break;
  270.  
  271.       case WM_ACTIVATEAPP:
  272.      if (wParam)
  273.         PostMessage(hDlg, WM_COMMAND, ID_GETLIST, 0L);
  274.      break;
  275.  
  276.       case WM_COMMAND:
  277.      #ifdef STRICT
  278.      #define DLGLIST   GetDlgItem(hDlg, ID_LIST)
  279.      #define DLGCLOSE  GetDlgItem(hDlg, ID_CLOSE)
  280.      #endif
  281.      switch(wParam)
  282.         {
  283.         case ID_LIST:
  284.            n = ListBox_GetCurSel(hLst);
  285.            if (n == LB_ERR)
  286.           return TRUE;
  287.            l = ListBox_GetItemData(hLst, n);
  288.            if (HIWORD(lParam) == LBN_SELCHANGE)
  289.           Button_Enable(hBut, HIWORD(l));
  290.            else if (HIWORD(lParam) == LBN_DBLCLK)
  291.           {
  292.           if (HIWORD(l))
  293.              {
  294.              TaskFindHandle(&te, (HANDLE)LOWORD(l));
  295.              wsprintf(szMsg, "Task   %04X %s hInst %04X hModule %04X SS %04X SP %04X sTop %04X sMin %04X sBot %04X",
  296.                te.hTask, (LPSTR)te.szModule, te.hInst, te.hModule, te.wSS, te.wSP, te.wStackTop, te.wStackMinimum, te.wStackBottom);
  297.              }
  298.           else
  299.              {
  300.              ModuleFindHandle(&me, (HANDLE)LOWORD(l));
  301.              wsprintf(szMsg, "Module %04X %s refcount %d", me.hModule, (LPSTR)me.szExePath, me.wcUsage);
  302.              }
  303.           MessageBox(hDlg, szMsg, szAppName, MB_ICONINFORMATION | MB_OK);
  304.           }
  305.            return TRUE;
  306.  
  307.         // Populate our listbox..
  308.         case ID_GETLIST:
  309.            Button_Enable(hBut, FALSE);
  310.            SetWindowRedraw(hLst, FALSE);
  311.  
  312.            j = ListBox_GetCurSel(hLst);
  313.            ListBox_ResetContent(hLst);
  314.  
  315.            // Enumerate the loaded modules..
  316.            me.dwSize = sizeof(MODULEENTRY);
  317.            ModuleFirst(&me);
  318.            do {
  319.           n = ListBox_AddString(hLst, me.szModule);
  320.           ListBox_SetItemData(hLst, n, MAKELONG(me.hModule,0)); // HIWORD == 0 == module
  321.           } while (ModuleNext(&me));
  322.  
  323.  
  324.            // Now enumerate the tasks..
  325.            te.dwSize = sizeof(TASKENTRY);
  326.            TaskFirst(&te);
  327.            do {
  328.           // Find the module which matches the task..
  329.           n = ListBox_FindString(hLst, 0, te.szModule);
  330.           // Replace the module handle with the task handle..
  331.           if (n != LB_ERR)
  332.              ListBox_SetItemData(hLst, n, MAKELONG(te.hTask,1)); // HIWORD == 1 == task
  333.           } while (TaskNext(&te));
  334.  
  335.            if (j != LB_ERR)
  336.           ListBox_SetCurSel(hLst, j);
  337.            else
  338.           ListBox_SetCurSel(hLst, 0);
  339.  
  340.            SetWindowRedraw(hLst, TRUE);
  341.  
  342.            InvalidateRect(hLst, NULL, TRUE);
  343.            return TRUE;
  344.  
  345.         case ID_TERMINATE:
  346.            n = ListBox_GetCurSel(hLst);
  347.            if (n == LB_ERR)
  348.           return TRUE;
  349.            l = ListBox_GetItemData(hLst, n);
  350.            // If this is a task, terminate it..
  351.            if ( HIWORD(l) && IsTask( (HTASK) LOWORD(l)) )
  352.           TerminateApp((HANDLE)LOWORD(l), NO_UAE_BOX);
  353.            // Else, reduce the reference count to 0..
  354.            else
  355.           {
  356.           j = 0;
  357.           while (n = FreeModule((HINSTANCE)LOWORD(l)))
  358.              {
  359.              if (j == n)
  360.             break;
  361.              j = n;
  362.              }
  363.           }
  364.  
  365.            PostMessage(hDlg, WM_COMMAND, ID_GETLIST, 0L);
  366.            return TRUE;
  367.  
  368.         case ID_CLOSE:
  369.            n = ListBox_GetCurSel(hLst);
  370.            if (n == LB_ERR)
  371.           return TRUE;
  372.            l = ListBox_GetItemData(hLst, n);
  373.            if (HIWORD(l) && IsTask((HTASK) LOWORD(l)) )
  374.           EnumTaskWindows((HTASK)LOWORD(l), (WNDENUMPROC)lpfn, 0L); //Kill the app..
  375.            PostMessage(hDlg, WM_COMMAND, ID_GETLIST, 0L);
  376.            return TRUE;
  377.  
  378.         case ID_QUIT:
  379.            EndDialog(hDlg, TRUE);
  380.            return TRUE;
  381.         }
  382.       break;
  383.  
  384.       case WM_DESTROY:
  385.      FreeProcInstance((FARPROC)lpfn);
  386.  
  387.       }
  388.    return FALSE;
  389.    }
  390.  
  391. */
  392.  
  393.  
  394.  
  395.  
  396.  
  397. BOOL FAR PASCAL EnumProc (HWND hwnd, LPARAM lParam)
  398.    {
  399.    PostMessage(hwnd, WM_CLOSE, 0, 0L);
  400.    MessageBeep(MB_ICONEXCLAMATION);
  401.    return 0;
  402.    }
  403.